package pbf.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author RICARDO
 */
public class DataHora
{
    private static Calendar calendar;
    private static final SimpleDateFormat DIA_MES_ANO = new SimpleDateFormat("dd/MM/yyyy");
    private static final SimpleDateFormat ANO_MES_DIA = new SimpleDateFormat("yyyy-MM-dd");

    private static void atualizar()
    {
         calendar = Calendar.getInstance();
    }

     /*------------------------------------------------
     *      Metódos Extras
     * ------------------------------------------------
     */

    public static String converteStringData(String data)
    {
        return (ANO_MES_DIA.format(getDate(data)));
    }

    public static String getTimestamp()
    {
        atualizar();
        return (getAno()+"-"+getMes()+"-"+getDia()+" "+getHora()+":"+getMinuto()+":"+getSegundo());
    }

    public static String getData(Date date)
    {
        return (DIA_MES_ANO.format(date));
    }

    public static String getData(Timestamp timeStamp)
    {
        return (DIA_MES_ANO.format(timeStamp));
    }

    public static Date getDate(String data)
    {
        final int ANO = Integer.parseInt(data.substring((data.length()-4), data.length()));
        final int MES = getMes(data);
        final int DIA = getDia(data);

        atualizar();
        calendar.set(ANO, (MES-1), DIA,getHora(),getMinuto(),getSegundo());
        return calendar.getTime();
    }

    /*------------------------------------------------
     *      Metódos referentes a Hora
     * ------------------------------------------------
     */

    private static int getDia(String data)
    {
        try
        {
           return Integer.parseInt(data.substring(0, 2));

        } catch (Exception e)
        {
            return Integer.parseInt(data.substring(0, 1));
        }
    }

    private static int getMes(String data)
    {
        int []posInicial = new int[4];
        int []posFinal = new int[4];

        //Combinação 1
        posInicial[0] = 3;
        posFinal[0] = 5;
        
        //Combinação 2
        posInicial[1] = 2;
        posFinal[1] = 4;
        
        //Combinação 3
        posInicial[2] = 2;
        posFinal[2] = 3;

        //Combinação 4
        posInicial[3] = 3;
        posFinal[3] = 4;

        int dia = -1;
        for (int i = 0; i <= 3; i++) {//   10/2/2011
            try
            {
                //System.out.println(data.substring(posInicial[i], posFinal[i]));
                return Integer.parseInt(data.substring(posInicial[i], posFinal[i]));// 10/04/2010
            } catch (Exception e) {
            }
        }
        return dia;
    }

    public static int getSegundo()
    {
        return calendar.get(Calendar.SECOND);
    }

    public static int getMinuto()
    {
        return (calendar.get(Calendar.MINUTE));
    }
    
    public static int getHora()
    {
    	return (calendar.get(Calendar.HOUR_OF_DAY));
    }

    /*------------------------------------------------
     *      Metódos referentes a Data formatada
     * ------------------------------------------------
     */

    public static String getDataPresente()// retorna EX: 9/9/2009
    {
        atualizar();
    	return (getDia()+ "/"+getMes()+"/"+getAno());
    }
    
    /*-------------------------------------
     *  Metódos referentes a Data
     * -------------------------------------
     */

    public static Calendar getCalendar()
    {
        atualizar();
        return calendar;
    }

     public static int getDia()
    {

        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    public static int getMes()
    {
    	return (calendar.get(Calendar.MONTH)+1);
    }

    public static int getAno()
    {
    	return calendar.get(Calendar.YEAR);
    }

    public static String getTimeStampInicioDoDia()
    {
        atualizar();
        return (getAno()+"-"+getMes()+"-"+getDia()+" 00:00:00");
    }

    public static String getTimeStampFimDoDia()
    {
        atualizar();
        return (getAno()+"-"+getMes()+"-"+getDia()+" 23:59:59");
    }

    public static void main(String []args)
    {
        //DataHora.getDate("1/12/2199");
        System.out.println(DataHora.converteStringData("1/1/2011"));
    }
}
